/**
 ****************************************************************************************************
 * @file        iic.c
 * @author      正点原子团队(ALIENTEK)
 * @version     V1.0
 * @date        2023-08-26
 * @brief       IIC驱动代码
 * @license     Copyright (c) 2020-2032, 广州市星翼电子科技有限公司
 ****************************************************************************************************
 * @attention
 *
 * 实验平台:正点原子 ESP32-S3 开发板
 * 在线视频:www.yuanzige.com
 * 技术论坛:www.openedv.com
 * 公司网址:www.alientek.com
 * 购买地址:openedv.taobao.com
 *
 ****************************************************************************************************
 */

#include "iic.h"

/**
 * @brief       初始化IIC
 * @param       I2C_NUM(I2C_NUM_0 / I2C_NUM_1)
 */
void iic_init(i2c_port_t I2C_NUM)
{
    gpio_num_t scl, sda;
    if (I2C_NUM == I2C_NUM_0)
    {
        scl = IIC0_SCL_GPIO_PIN;
        sda = IIC0_SDA_GPIO_PIN;
    }
    else
    {
        scl = IIC1_SCL_GPIO_PIN;
        sda = IIC1_SDA_GPIO_PIN;
    }

    i2c_config_t iic_config_struct = {0};
    iic_config_struct.mode = I2C_MODE_MASTER;                               /* 设置IIC模式-主机模式 */
    iic_config_struct.sda_io_num = sda;                                     /* 设置IIC_SDA引脚 */
    iic_config_struct.sda_pullup_en = GPIO_PULLUP_ENABLE;                   /* 配置IIC_SDA引脚上拉使能 */
    iic_config_struct.scl_io_num = scl;                                     /* 设置IIC_SCL引脚 */
    iic_config_struct.scl_pullup_en = GPIO_PULLUP_ENABLE;                   /* 配置IIC_SCL引脚上拉使能 */
    iic_config_struct.master.clk_speed = IIC_FREQ;                          /* 设置IIC通信速率 */
    i2c_param_config(I2C_NUM, &iic_config_struct);               /* 设置IIC初始化参数 */

    /* 激活I2C控制器的驱动 */
    i2c_driver_install(I2C_NUM,                     /* 端口号 */
                       I2C_MODE_MASTER,             /* 主机模式 */
                       I2C_MASTER_RX_BUF_DISABLE,   /* 从机模式下接收缓存大小(主机模式不使用) */
                       I2C_MASTER_TX_BUF_DISABLE,   /* 从机模式下发送缓存大小(主机模式不使用) */     
                       0);                          /* 用于分配中断的标志(通常从机模式使用) */            
}


